#include"clude.h"
class person {
public:
	//Ĭ�Ϲ��캯��
	person() {
		cout << "Ĭ�Ϲ��캯��" << endl;
	}
	//�вι��캯��
	person(int r ,int l) {
		mr = r;
		ml = new int(l);     //    ָ����� = new ���ͣ���������
		cout << "�вεĹ��캯��" << endl;
	}
	//�������캯��
	person(const person& p) {

		//�������������ڶ����������ڴ棬�ᵼ��ǳ�����������ظ��ͷŶ�������

		mr = p.mr;   // ml = *p.ml   ���Ǳ�������ǳ����������Ĭ��ִ�е�
		

		ml = new int(*p.ml);   //��������¿���һ���ڴ�
		cout << "�������캯��" << endl;
	}
	//��������
	~person() {
		//�Ѷ�����ml�����ͷ�
		if (ml != NULL) {
			delete ml;
		}
		else {
			ml = NULL;
		}
	
		cout << "��������" << endl;
	}

	int mr;
	//���������ǳ���Ա�Լ�������ڴ棬��c++�У�ʹ��new��delete�����롣��new�Ƿ��ص�ַ����ָ�롣
	int* ml;

};
void test() {

	//��������ʹ��c++������Ĭ�ϵĿ�������(ǳ����)���������ǲ��ᱨ��ġ�
	person p1(10, 20);
	cout << "p1��mr="<<p1.mr<<endl;
	cout << "p1��ml=" << *p1.ml << endl;
	cout << endl;


	//�����ڶ�������һ�����ݣ���new�������ڴ棬��ʱǳ�������޷��ɹ�
	person p3(p1);
	cout << "p3��mr=" << p3.mr << endl;
	cout << "p3��ml=" << *p3.ml << endl;

	//���ǻ���һ�����棬��ʱ������Ĭ�ϵĿ������캯���������ǿ���p1�ľ��Ѿ��ͷ����ڴ棬
	//���ǵ�p3�ٴ��ͷţ��������ͻ��о��档����Ҫ�Լ�����һ����������,��new���ڴ������µ��ڴ档
}
int main() {


	test();

	return 0;
}